The set of network protocols which enable communication over the Internet is sometimes referred to as the TCP/IP protocol suite, after its two most well known protocols: the Transmission Control Protocol (“TCP”) and the Internet Protocol (“IP”). The TCP protocol, which resides at the “transport” layer of the Internet protocol stack, is a reliable, connection-oriented protocol which ensures that data arrives at its destination undamaged and in order. In addition, the TCP layer continuously measures network load and throttles its sending rate in order to avoid overloading the network. The IP protocol performs the basic task of moving packets of data from source to destination using IP addresses. IP can carry data for a number of different higher level protocols, each of which are identified by a unique IP Protocol Number.
In order to establish communication with a remote host on a TCP/IP network, a “socket” connection to the remote host must be established. A socket is defined by the combination of the IP address of the remote host and a port number identifying a remote application type. For example, port 80 is the standard port number for Hypertext Transport Protocol (“HTTP”) traffic, and port 80 packets are typically processed by a Web server.
A variety of wireless messaging and personal information management (PIM) devices have been introduced over the past few years including, for example, the T-Mobile Sidekick LX designed by the assignee of the present application. The TCP/IP protocol is used by many of these devices to communicate over wireless networks (e.g., the General Packet Radio Service (“GPRS”) used on GSM networks). Consequently, in order to communicate with a remote host, these devices must open and maintain a socket connection to the remote host in the same manner as wired computer systems (e.g., PC desktops and notebooks).
One problem with this scenario is that, due to the inherent unreliability of wireless networks, wireless socket connections may not be suitable for certain types of applications. For example, stream-based applications such as Secure Shell (“SSH”) connections require a significant amount of initialization overhead in order to establish (e.g., negotiating encryption variables, user authentication data, etc) and must be maintained over a relatively long period of time (i.e., in comparison to transaction-based applications such as Web browsing). Similarly, when a user is viewing a video or audio stream over a wireless network and the wireless connection is temporarily broken, the user must reconnect to the remote server and start the video or audio stream from the beginning. For these types of connections, when a socket is closed (e.g., due to an unreliable wireless network) it is typically quite burdensome on the end user, who loses all state information associated with the connection and must then take the time to reestablish the connection with the remote server.
Accordingly, what is needed is an improved mechanism for maintaining connections with remote servers over a wireless network.